本节,我们将整合RabbitMQ作为我们项目的消息中间件。暂时我们只做单机配置。

本章源码

RabbitMQ 安装配置

这里我只介绍下CentOS7下的RabbitMQ安装。

安装依赖erlang

  • 使用yum下载(可能不是最新版,新版的RabbitMQ需要新版的erlang)
1
yum install erlang
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 新建 /etc/yum.repos.d/rabbitmq-erlang.repo
vim /etc/yum.repos.d/rabbitmq-erlang.repo
# 输入下面内容
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/6
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
# 更新yum
yum makecache
yum update
# 安装
yum install erlang

安装RabbitMQ

  • 使用yum下载(可能不是最新版)
1
yum install rabbitmq-server
  • 官网下载最新rpm包安装
1
2
3
4
# 下载rpm包
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.4/rabbitmq-server-3.7.4-1.el7.noarch.rpm
# 安装
yum install rabbitmq-server-3.7.4-1.el7.noarch.rpm

RabbitMQ管理

开机启动

1
chkconfig rabbitmq-server on

运行停止

1
2
/sbin/service rabbitmq-server start
/sbin/service rabbitmq-server stop

开启web管理界面

1
rabbitmq-plugins enable rabbitmq_management

打开浏览器访问http://localhost:15672/,使用默认用户guest登录,密码也为guest,进入管理页面。如果用的是阿里云服务器,需要安全组开启15672和5672端口。

如果你是把rabbitmq部署在服务器上,访问管理页面可能会提示guest不能登入,可以使用下面的命令添加用户:

1.查看RabbitMQ中用户命令

rabbitmqctl list_users

2.创建用户命令

rabbitmqctl add_user wt 123456

3.赋予用户权限命令

rabbitmqctl set_permissions -p "/" wt '.\*' '.*' '.*'

4.赋予用户角色命令

rabbitmqctl set_user_tags wt administrator

Spring Boot整合

web模块下的pom.xml引入依赖:

1
2
3
4
5
<!-- amqp -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

application.yml添加一下配置:

1
2
3
4
5
6
spring:
rabbitmq:
addresses: 101.132.44.128
port: 5672
username: wt
password: 123456

新建一个RabbitConfig配置类。用来配置队列、交换器、路由等高级信息。这里我们以入门为主,新建一个hello队列。

1
2
3
4
5
6
7
8
9
import org.springframework.amqp.core.Queue;
@Configuration
public class RabbitConfig {

@Bean
public Queue helloQueue() {
return new Queue("hello");
}
}

新建一个Producer类,用来发送信息:

1
2
3
4
5
6
7
8
9
@Component
public class HelloProducer {
@Autowired
private AmqpTemplate amqpTemplate;

public void send(String msg) {
amqpTemplate.convertAndSend("hello", msg);
}
}

新建一个Consumer,用来消费信息:

1
2
3
4
5
6
7
8
9
10
11
12
@Component
//`@RabbitListener`用来表示对那个队列进行监听
@RabbitListener(queues = "hello")
@Slf4j
public class HelloConsumer {
//`@RabbitHandler`用来定义处理消息的方法
@RabbitHandler
public void process(String msg) {
log.info("mq msg : " + msg);
}

}

新建一个测试类,测试一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
@Slf4j
public class Test1 {
@Autowired
private HelloProducer helloProducer;

@Test
public void test1() {
for (int i = 0; i < 100; i++) {
helloProducer.send("hello + " + i);
}
log.info("send ok");
}
}

运行测试类,查看console的输出,发现我们的配置以及生效。也可以在rabbitmq的web管理页面看到我们的Queue信息。

到目前为止,一个基本的消息生产和消费过程已经完成了。更多的配置和高级的用法,我们之后再研究(我也还不知道)。